using System;
using JetBrains.Annotations;
using Kaleida.ServiceMonitor.Model.Runtime;

namespace Kaleida.ServiceMonitor.Model
{
    public class ScriptCompilation
    {
        private Exception error;
        private CompiledScript compiledScript;

        public static ScriptCompilation Success(CompiledScript compiledScript)
        {
            return new ScriptCompilation {error = null, compiledScript = compiledScript};
        }

        public static ScriptCompilation Error(Exception exception)
        {
            return new ScriptCompilation {error = exception, compiledScript = null};
        }

        public bool Succeeded
        {
            get { return error == null; }
        }

        [NotNull]
        public Exception Exception
        {
            get
            {
                if(error == null)
                    throw new InvalidOperationException("Compilation completed successfully");

                return error;
            }
        }
        
        [NotNull]
        public CompiledScript CompiledScript
        {
            get
            {
                if(error != null)
                    throw new InvalidOperationException("Compilation did not complete successfully. See the Exception property");

                return compiledScript;
            }
        }
    }
}